package bean.dao;

import hbt.HibernateUtil;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import dominio.Pais;

public class HibernatePaisDAO {
	private static HibernatePaisDAO instancia = null;
	private static SessionFactory sf = null;
	private Session session = null;

	public static HibernatePaisDAO getInstancia() {
		if (instancia == null) {
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernatePaisDAO();
		}
		return instancia;
	}

	private Session getSession() {
		if (session == null)
			session = sf.openSession();
		return session;
	}

	public void closeSession() {
		if (session != null)
			session.close();
	}

	public void agregarPais(Pais pais) {
		Session s = getSession();
		s.beginTransaction();
		s.persist(pais);
		s.flush();
		s.getTransaction().commit();

	}

	public String getUltimoId() {
		Session s = getSession();
		String o = (String) s.createQuery(
				"select max(pais.idPais) from Pais pais")
				.uniqueResult();
		return o;

	}

	public void eliminarPais(Pais pais) {
		Session s = getSession();
		s.beginTransaction();
		s.delete(pais);
		s.flush();
		s.getTransaction().commit();
	}

	public Pais loadPais(Pais pais) {
		Session s = this.getSession();

		s.load(pais, pais.getPaisId());
		return pais;

	}

	@SuppressWarnings("unchecked")
	public List<Pais> listarPaises() {

		Session s = this.getSession();
		List<Pais> lista = s.createQuery("from Pais").list();
		return lista;
	}

	public void modificarPais(String idPais, String razonSocial,
			String origen) {
		
		Session s = getSession();
		s.beginTransaction();
		Pais pais = new Pais();
		pais.setPaisId(Integer.parseInt(idPais));
		pais.setNombre(razonSocial);
		//pais.setOrigen(origen);
		s.update(pais);
		s.flush();
		s.getTransaction().commit();
	}

	@SuppressWarnings("unchecked")
	public List<String> listaId() {
		Session s = getSession();
		List<String> lista = s.createQuery(
				"select pais.idPais from Pais pais").list();
		s.clear();
		return lista;
	}

	public Pais buscarPais(int id) {
		Session s = getSession();
		Pais pais = (Pais) s.getNamedQuery("imprimir Pais")
				.setInteger("id", id).uniqueResult();
		s.clear();
		return pais;

	}

	public Pais buscarPais(String nombre) {
		Session s = getSession();
		Pais pais = (Pais) s.createQuery("select pai from Pais pai where pai.nombre= '"+nombre+"'").uniqueResult();
		s.clear();
		return pais;

	}
	
	public String imprimirPais(String id) {
		Session s = getSession();

		Pais pais = (Pais) s.getNamedQuery("imprimir Pais")
				.setString("id", id).uniqueResult();

		String str;
		if (pais != null) {

			str = "id: " + pais.getPaisId()
					+ "\npais: " + pais.getNombre() + "\nsigla: "
					+ pais.getSigla();
		}

		else
			str = null;

		s.clear();
		return str;

	}
}
